package functional.methodreferences;

/**
 * @ClassName MultiUnbound
 * @PackageName functional
 * @projectName myThread
 * @Description 
 * @Author games
 * @Date 2025/8/26 上午11:24
 * @Version 1.0
 */
// 未绑定的方法与多参数的结合运用

class TestThis {
    void two(int i, double d) {
    }

    void three(int i, double d, String s) {
    }

    void four(int i, double d, String s, char c) {
    }
}

interface TwoArgs {
    void call2(TestThis athis, int i, double d);
}

interface ThreeArgs {
    void call3(TestThis athis, int i, double d, String s);
}

interface FourArgs {
    void call4(
            TestThis athis, int i, double d, String s, char c);
}

public class MultiUnbound {
    public static void main(String[] args) {
        /**
         *为了指明这一点，我将类命名为 This，将函数式方法的第一个参数命名为 athis，但你在生产代码中应该使用其他名字，以防止混淆。
         */
        //TestThis::two、TestThis::three、TestThis::four 都是未绑定的实例方法引用
        //这些方法在 TestThis 类中都是非静态方法
        //方法引用在调用时需要提供实例对象作为第一个参数
        TwoArgs twoargs = TestThis::two;
        ThreeArgs threeargs = TestThis::three;
        FourArgs fourargs = TestThis::four;

        // 创建TestThis类的实例对象
        TestThis athis = new TestThis();

        // 调用两个参数的函数式接口方法，传入实例对象和参数(11, 3.14)
        twoargs.call2(athis, 11, 3.14);

        // 调用三个参数的函数式接口方法，传入实例对象和参数(11, 3.14, "Three")
        threeargs.call3(athis, 11, 3.14, "Three");

        // 调用四个参数的函数式接口方法，传入实例对象和参数(11, 3.14, "Four", 'Z')
        fourargs.call4(athis, 11, 3.14, "Four", 'Z');

    }
}
